// 输入：nums = [2,7,11,15], target = 9
// 输出：[0,1]
// 解释：因为 nums[0] + nums[1] == 9 ，返回 [0, 1] 。

function twoSum (nums, target) {
    // 用于记录每个值的索引，形如: { 2: 0, 7: 1, ... }
    var record = {};
    for (var i = 0; i < nums.length; i++) {
        var n1 = nums[i];
        // 期待的第二个数
        var n2 = target - n1;
        // 如果期待的第二个数恰好在record中存在，则说明找到了
        // record[n2]为记录过的数字的索引
        // 注: 由于record[n2]是索引，有可能为0，0是假值，所以if的时候需要判断是否为undefined
        if (record[n2] !== undefined) {
            return [record[n2], i];
        } else {
            // 否则就把当前项n1计入record中
            record[n1] = i;
        }
    }
    return [-1, -1];
}

console.log( twoSum([2, 7, 11, 15], 13) );
